//
//  ViewController.swift
//  Emoticon
//
//  Created by 亚杏 on 2017/6/5.
//  Copyright © 2017年 oms. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var demoLabel: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()

        //目标： 我[爱你]啊[笑哈哈]
        /**
         注意：
         - 顺序替换，替换了前面时，后面的范围会失效，所有
         - 倒序替换，一次查找循环，可以把所有的图片全部替换完成
         */
        let string = "我[爱你]啊[笑哈哈]"
       demoLabel.attributedText = XYXEmoticonManager.shared.emoticonStringToAttrStr(string: string, font: demoLabel.font)
    }





    func demo () {
        //----测试表情图像
        print(XYXEmoticonManager.shared.packages.last?.emoticons.first?.image ?? "")

        //----测试查找表情
        print(XYXEmoticonManager.shared.findEmoticon(string: "[爱你]")!)

        //----测试生成表情文本
        let em = XYXEmoticonManager.shared.findEmoticon(string: "[爱你]")!
        demoLabel.attributedText = em.imageText(font: demoLabel.font)
        

    }

    func demo2 () {
        /// 将给定的字符串转换成属性文本
        /// - Parameter string:  完整的字符串
        /// - Returns: 属性文本
        func emoticonStringToAttrStr(string: String) -> NSAttributedString {
            let attrString = NSMutableAttributedString(string: string)

            //1. 建立正则表达式，过滤所有表情文字,[]需要加双斜线转义
            let pattern = "\\[.*?\\]"
            guard let regx = try? NSRegularExpression(pattern: pattern, options: []) else{
                return attrString
            }

            //2. 匹配所有项
            let matches = regx.matches(in: string, options: [], range: NSRange(location: 0, length: attrString.length))

            //3. 遍历所有的匹配结果
            for m in matches.reversed() {
                let r = m.rangeAt(0)
                let subStr = (attrString.string as NSString).substring(with: r)

                // 1> 使用 subStr 查找对应的表情符号模型
                if let em = XYXEmoticonManager.shared.findEmoticon(string: subStr){
                    // 2> 使用表情符号中的imageName，替换原有的属性文本
                    attrString.replaceCharacters(in: r, with: (em.imageText(font: demoLabel.font)))
                }
                
            }
            return attrString
        }

    }

}

